home *** CD-ROM | disk | FTP | other *** search
- This is an implementation of huge arrays and huge vectors using templates and
- the Borland container class library. Here are the features:
-
- 1: The code is for 16 bit platforms, DOS, DPMI16, WINDOWS, for Borland C++ 4.02 .
-
- 2: Huge arrays provide arrays of items that go beyond 64K in the 16 bit world
- to access all of available memory.
-
- 3: The code is a direct modification of Borland's arrays.h, vectimp.h, and
- alloctr.h . These files are harrays.h, hvectimp.h, and halloctr.h . To
- use huge arrays, just include the file harrays.h in your source. To use
- huge vectors just include the file hvectimp.h in your source. The other
- file(s), as well as files in Borland's container class library will be
- included automatically.
-
- 4: The names for the huge arrays and the huge vectors are the exact same
- names you would use for normal arrays and vectors in Borland's container
- class library but with the word "Huge" preceding the Array of Vector in the
- name. For instance instead of instantiating a TArrayAsVector object you
- would instantiate a THugeArrayAsVector object. Instead of instantiating
- a TVectorImp you would instantiate a THugeVectorImp. The same naming
- conventions go for the array and vector iterators. The naming conventions
- for Borland 3.1, accessible by defining BI_OLDNAMES before including the
- container class library header file(s), is not supported for this
- implementation.
-
- 5: There is no conflict between this huge array implementation and any of the
- other container class libraries.
-
- 6: Both direct and indirect arrays and vectors are fully supported.
- For direct arrays you are still adding just the object, not a huge object.
- For the indirect arrays and vectors you are still passing in normal pointers
- to objects, not huge pointers to these objects. It is the array or
- vector that is "huge" not the objects themselves.
-
- 7: For both direct and indirect objects the [] operator to access these objects
- return a "huge reference" rather than just a reference. For direct containers
- this is a huge reference to the actual object ie. T __huge & , while for
- indirect containers this is a huge reference to the pointer to the object
- ie. T * __huge & . This parallels the normal container classes case.
-
- 8: For direct containers, other functions other than the [] operator that pass back
- references or pointers to the containers now pass back huge references or
- huge pointers to these containers. These include the things like the
- ++ iterator operators, the FirstThat and LastThat functions etc. This
- parallels the normal container classes.
-
- 9: For indirect containers, other functions other than the [] operator above
- pass back the actual pointer to the object. This is a normal pointer, not
- a huge pointer ( see 6: above ). This parallels the normal container classes.
-
- 10: Sizes for these arrays and vectors are no longer int or unsigned int
- but long and unsigned long respectively. Functions that used to pass back the
- 2 byte quantities now pass back the 4 byte quantities ie. ArraySize and
- GetItemsInContainer . Array and vector sizes are initialized
- in terms of long and unsigned long sizes rather than int and unsigned int
- respectively.
-
- 11: This implementations uses internally the standard library functions
- "farmalloc" and "farfree" whereas the standard container classes use the
- C++ "new" and "delete" operators. The "new" and "delete" operators could
- not be used since they take "size_t" sizes and "size_t" in the 16 bit
- world is an unsigned int. You do not have to be concerned about this
- unless you use your own managed memory array or vector, in which case
- look at halloctr.h . Otherwise this knowledge is transparent.
-
- 12: Because "farmalloc" and "farfree" is used in place of "new" and "delete"
- an exception is thrown if memory could not be allocated. The name of the
- exception is THugeXAllocation . It is located in halloctr.h, which is
- automatically included when you include harrays.h or hvectimp.h . The
- exception has one public member, "unsigned long size", which is the size
- of the allocation on which farmalloc failed. The exception could occur
- when:
-
- You initially allocate an array or vector of a certain size in the
- constructor.
- Use the copy constructor to construct an array or vector from another
- array or vector.
- Assign an array or vector to your present array or vector.
- Add or AddAt an object to your array or vector.
-
- You can catch this exception and deal with as you like in the normal way.
-
- 13: This is NOT, repeat NOT, an official implementation by Borland and is in
- no way connected with them. My name is Edward Diener, my Compuserve ID is
- 70304,2632 . I will be happy to hear of any problems you have with this
- implementation in order fix things if anything is wrong. However you are
- largely on your own when it comes to understanding huge arrays and vectors.
- I have made the implementation as transparent as possible and it parallels
- as closely as I can make it the normal array and vector container class
- implementation. You have the source code and so can modify it for your
- own purposes but please, if you re-post it for any reason for other users
- ask Borland's permission first. I have asked and received Borland's
- permission to post this code for other users. I do not have Borland 4.5
- yet so I have no idea whether this will work with Borland 4.5 . If when
- I receive 4.5 there is still no support for huge arrays and vectors I may
- do the implementation for 4.5 .
-
- 14: This was originally done because I wanted to access arrays greater than
- 64K for a personal project I am doing. I am not in love with "huge"
- keywords, segmented architecture etc. I will be only too happy to move
- to the 32 bit world and leave all that nonsense behind. However I use
- Borland's Paradox Engine and Database Frameworks and am beginning to use
- the Database Engine, and both are still only for the 16 bit world. I
- eagerly look forward to Borland releasing their Database Engine for the
- 32 bit world, hopefully for both WIN32 and DPMI32, at which time I will
- glad leave the limitations of the 16 bit world behind.
-